<?php

namespace Admin\Model;

use Think\Model;

/**
 * 权限管理之管理员模型类
 * Class AdminModel
 * @package Admin\Model
 */
class AdminModel extends Model
{
    // 进行表单的合法性检测
    protected $insertFields = array('admin_name', 'password', 'cpassword', 'email');
    protected $updateFields = array('admin_id', 'password', 'cpassword', 'email', 'status');

    // 登录时表单验证的规则 
    public $_login_validate = array(
        array('admin_name', 'require', '用户名称不能为空!',),
        array('password', 'require', '登陆密码不能为空！'),
    );

    // 添加修改管理员时用
    protected $_validate = array(
        array('admin_name', 'require', '账号名不能为空！', 1, 'regex', 1),
        array('admin_name', '1,30', '账号的值最长不能超过 30 个字符！', 1, 'length', 1),
        array('password', 'require', '密码不能为空！', 1, 'regex', 1),
        array('cpassword', 'password', '两次密码输入不一致！', 1, 'confirm', 1),
        array('status', 'number', '是否启用 1：启用0：禁用必须是一个整数！', 2, 'regex', 3),
        array('admin_name', '', '账号已经存在！', 1, 'unique', 1),
    );

    /**
     * 执行用户登陆验证操作
     * @return boolean
     */
    public function doLogin()
    {
        // 获取表单中的用户名密码
        $admin_name = $this->admin_name;
        $password = $this->password;
        $admin = $this->where(array('admin_name' => $admin_name))->find();
        if ($admin) {
            // 判断是否启用(超级管理员不能禁用）
            if ($admin['admin_id'] == 1 || !$admin['status'] == 1) {
                if (pwdHash($password, $admin['password'], true)) {
                    // 把ID和用户名存到session中
                    session('admin_id', $admin['admin_id']);
                    session('admin_name', $admin['admin_name']);
                    return true;
                } else {
                    $this->error = '密码不正确！';
                    return false;
                }
            } else {
                $this->error = '管理帐号被禁用！';
                return false;
            }
        } else {

             //   $this->error = '管理帐号不存在！';
            //  return false;
         //因为增加了可以通过用户表登陆，将用户登陆设置为一固定值，即为部门用户。本地为7
            session('admin_id','6');
            session('admin_name', 'bumen');
//如果管理账号不存在，就到user中查询

            $userModel =D('User');
            $user = $userModel->where(array('phone' => $admin_name))->find();

           if ($user) {
               if (yunshangPasswordEncode($password)== $user['password']) {
                   session('user_id', $user['user_id']);
                   session('user_name', $user['username']);
                   session('phone', $user['phone']);
                     session('level_id', $user['level_id']);
                   session('object_ids', $user['object_ids']);
             //echo '密码正确'.$user['phone'];
            return true;
               }else {
                   $this->error = '密码不正确！';
                   return false;}

               /*
               if (yunshangPasswordEncode($password)== $user['password']) {
                   // 把ID和用户名(手机号码)存到session中
                //  session('user_id', $user['user_id']);
                //  session('user_name', $user['username']);
                 //  session('phone', $user['phone']);
                 //  session('level_id', $user['phone']);
                   $this->error = '密码正确！';
                 //  return true;
               } else {
                   $this->error = '密码不正确！';
                      return false;
               }

           } else {
               $this->error = '帐号不存在！';
               return false;
   */
           }else
           {
               $this->error = '帐号不存在！';
               return false;
           }





        }



    }

    /**
     * @inheritdoc
     */
    protected function _before_insert(&$data, $option)
    {
        $data['password'] = pwdHash($data['password']);
        $data['addtime'] = NOW_TIME;
        $data['last_login_ip'] = get_client_ip();
        $data['last_login_time'] = NOW_TIME;
        $data['login_count'] = 1;
        $data['status'] = 0;
    }

    /**
     * @inheritdoc
     */
    protected function _after_insert($data, $option)
    {
        $roleId = I('post.role_id');
        if ($roleId) {
            $arModel = M('AdminRole');
            foreach ($roleId as $v) {
                $arModel->add(array('admin_id' => $data['admin_id'], 'role_id' => $v));
            }
        }
    }

    /**
     * @inheritdoc
     */
    protected function _before_update(&$data, $option)
    {
        //p($data);die;
        //如果是超级管理员必须是启用的
        if (($option['where']['admin_id'] == 1) && $data['status'])
            $data['status'] = 0;         // 直接设置为启用状态
        $roleId = I('post.role_ids');
        if ($roleId) {
            $adminModel = M('AdminRole');
            $adminModel->where(array('admin_id' => array('eq', $data['admin_id'])))->delete();
            foreach ($roleId as $v) {
                $adminModel->add(array(
                    'admin_id' => $data['admin_id'],
                    'role_id' => $v
                ));
            }
        }
        // 判断密码为空就不修改这个字段
        if (empty($data['password']))
            unset($data['password']);
        else
            $data['password'] = pwdHash($data['password']);

        unset($data['admin_id']);
    }

    /**
     * @inheritdoc
     */
    protected function _before_delete($option)
    {
        if ($option['where']['admin_id'] == 1) {
            $this->error = '超级管理员不能被删除！';
            return false;
        }
        // 在删除admin表中管理员的信息之前先删除admin_role表中这个管理员对应的数据s
        $arModel = M('AdminRole');
        $arModel->where(array('admin_id' => array('eq', $option['where']['admin_id'])))->delete();
        return true;
    }
}